package org.huangrui.javase.collectionMap.collection;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @Author hr
 * @Create 2025-11-07 16:23
 **/
public class T05ListRemove {
    @Test
    public void test1(){
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);

        list.remove(Integer.valueOf(2)); //删除元素2
        list.remove(0);//删除索引[0]位置的元素
        System.out.println(list);
    }
    @Test
    public void test2(){
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(3);
        list.add(4);
        list.removeIf(num->num % 2 == 0);//根据条件删除元素
        System.out.println(list);
    }
    @Test
    public void test3(){
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(3);
        list.add(4);
        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext()){
            Integer num = iterator.next();
            if(num % 2 == 0){
                iterator.remove();//使用迭代器删除元素
            }
        }
        System.out.println(list);
    }

    @Test
    public void test5(){
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(3);
        list.add(4);

        //普通for循环删除元素
        for(int i=0; i<list.size(); i++){
            Integer num = list.get(i);
            if(num % 2 == 0){
                list.remove(i);
            }
        }
        System.out.println(list);
    }

    @Test
    public void test4(){
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(3);
        list.add(4);

        //ConcurrentModificationException
        for (Integer num : list) {
            if(num % 2 == 0){
                list.remove(num);
            }
        }
    }
}
